// 用在extframe框架中,代替原iframe模式,实现真正意义上的ext grid application
document
		.write("<script src=\""
				+ context
				+ "/temp-store/jsstuff/tablequery/bestboy.js\" type=\"text/javascript\"></script>");

/**
 * 初始化对象数据信息在控制台tab页中
 * 
 * @param {
 *            options.tabid options.querykey options.func options.pageSize
 *            options.tabparam } options
 */
function initTQExtTabList(options) {
	var tabid = options.tabid;
	var querykey = options.querykey;
	options.params = options.tabparam;

	/*
	 * var url = context +
	 * '/system/tablearg.do?method=modelcmp&comptype=TQExtTabList&' + param;
	 */

	var url = context + "/temp-store/jsstuff/tablequery/"
			+ tablequeryStuff[querykey] + "/" + querykey + ".json";

	Ext.Ajax.request({
				url : url,
				params : {
					querykey : querykey
				},
				method : 'POST',
				success : function(rs, request) {
					var result = rs.responseText;// 拿到结果集，此时为字符串

					var resultJson = Ext.util.JSON.decode(result);// 将字符串转换为json类型

					if (resultJson.success) {
						var grid = createTableQueryList(tabid, options,
								resultJson);

						grid.setIconClass('tabs');
						grid.closable = true;

						if (grid != null) {
							Ext.getCmp(options.tabcontainerid).add(grid);
							Ext.getCmp(options.tabcontainerid)
									.setActiveTab(grid);
						} else {
							Ext.Msg.alert('提示', '未能获取通用查询列表');
						}

					} else {
						Ext.Msg.alert('提示', json.msg);
					}

				},
				failure : function(rs, request) {
					Ext.Msg.alert('提示', '未知的异常错误');
				}
			});
}

function createTableQueryList(gridId_, options, resultJson) {
	var gridId = gridId_;
	var func = options.func;
	var pageSize = options.pageSize ? options.pageSize : 20;
	var listType = options.type == null ? 'gridlist' : 'tablequerycmp';
	var json = resultJson.resultData;
	var querykey = json.id;
	// 查询form显示模式
	var layout;

	if (options.layout != null) {
		layout = options.layout;
	} else {
		layout = json.param.layout == null ? 'window' : json.param.layout;
	}

	if (layout == 'border') {
		gridId = gridId_ + '_grid';
	}

	if (json.jsurl != '') {
		var xmlhttp = sendRequestObject(context + json.jsurl);
		if (xmlhttp.status == 200) {
			IncludeJS(querykey + '_js', xmlhttp.responseText);
		} else if (xmlhttp.status == 404) {
			alert('通用查询自定义js文件(' + json.jsurl + ')并不存在');
		}
	}

	if (json.cssurl != '') {
		var xmlhttp = sendRequestObject(context + json.cssurl);
		if (xmlhttp.status == 200) {
			IncludeCSS(querykey + '_css', xmlhttp.responseText);
		} else if (xmlhttp.status == 404) {
			alert('通用查询自定义css文件(' + json.cssurl + ')并不存在');
		}
	}

	var title = json.name;

	var showchk = json.showchk;

	var items = [];

	var sm;
	if (showchk) {
		sm = new Ext.grid.CheckboxSelectionModel({
					handleMouseDown : Ext.emptyFn
				});

		items.push(sm);
	}

	var cm;

	Ext.each(json.columnModel, function(n) {
				// 默认render函数名称
				var renderName = querykey;
				// 自定义
				if (n.render != null && n.render != '') {
					renderName = n.render;
				} else if (options.comptype != null
						&& trim(options.comptype) != "") {
					// 菜单定义时指定的参数
					renderName = options.comptype;
				}

				var item = {
					header : n.display,
					dataIndex : n.name,
					sortable : n.sortable,
					width : parseInt(n.width),
					clazz : n.clazz,
					renderer : function(v, c, r, row, col, s) {
						var resultObj;
						try {
							resultObj = eval(renderName
									+ "(v, c, r, row, col, s, gridId)");
						} catch (e) {
							// alert(e.name + ": " + e.message);
							return v
						}
						return resultObj;
					}
				};

				items.push(item);
			});

	cm = new Ext.grid.ColumnModel(items);

	gridCMMap.put(gridId, cm);

	// query items to form items
	var queryItems = [];

	if (json.queryModel != null && json.queryModel.length > 0) {
		Ext.each(json.queryModel, function(queryItem) {
					var jsonObj = {
						"defaultValue" : queryItem.param,
						"formName" : queryItem.formName,
						"label" : queryItem.label,
						"name" : queryItem.column,
						"type" : queryItem.type,
						"param" : queryItem.jsonParam,
						"mode" : queryItem.mode
					}

					queryItems.push(jsonObj);
				});

		gridQIMap.put(gridId, queryItems);

	}

	var defaultToolbarMenus = [];

	// 查询条件form在window窗口模式
	if (json.queryModel.length > 0 && layout == 'window') {

		defaultToolbarMenus.push({
			iconCls : 'objqueryset',
			text : '数据查询',
			handler : function() {
				// getQueryFormCmp(gridId,
				// title);

				var formObj = {
					bodyStyle : 'padding:5px;',
					autoScroll : true,
					border : false,
					frame : false
				}

				var queryParams = queryParamsMap.get(gridId);

				if (queryParams != null) {
					Ext.each(queryItems, function(item) {
								item.defaultValue = queryParams[item.formName];
							});
				}

				var queryForm = getTableViewForm({
							id : gridId_ + '_queryForm',
							component : queryItems,
							frozen : true,
							size : {
								columnCount : json.param.columnCount == null
										? 1
										: json.param.columnCount
							}
						}, options, formObj);

				var queryWin = new Ext.Window({
					renderTo : Ext.getBody(),
					layout : 'fit',
					width : json.param.width == null ? 450 : json.param.width,
					height : json.param.height == null
							? 300
							: json.param.height,
					title : '数据查询',
					resizable : true,
					plain : true,
					modal : true,

					items : [queryForm],

					buttons : [{
						text : '查 询',
						handler : function() {
							if (queryForm.form.isValid()) {
								initQueryTestParams(queryForm, gridId, pageSize);

								var queryParams = getQueryParams(gridId);

								Ext.getCmp(gridId).getStore().reload({
											params : queryParams
										});

								queryWin.close();
							}
						}
					}, {
						text : '重 置',
						handler : function() {
							queryForm.form.getEl().dom.reset();

							var hiddenItems = queryForm.hiddenItems;

							if (hiddenItems != null) {
								Ext.each(hiddenItems, function(item) {
											queryForm.getForm()
													.findField(item.name)
													.setValue('');
										});
							}
							
							queryParamsMap.remove(gridId);
						}
					}, {
						text : '关 闭',
						handler : function() {
							queryWin.close();
						}
					}]
				});

				queryWin.show();
			}
		});
	}

	if (listType == 'tablequerycmp') {
		defaultToolbarMenus.push({
			iconCls : 'objselect',
			text : '选 择',
			handler : function() {
				var ids = '';
				var names = '';
				var selNodes = grid.getSelectionModel().getSelections();
				Ext.each(selNodes, function(node, idx) {
							if (idx < selNodes.length - 1) {
								names += node.get(options.pointName) + ',';
								ids += node.get(options.pointId) + ',';
							} else {
								names += node.get(options.pointName);
								ids += node.get(options.pointId);
							}

							if (options.setFunc) {
								options.setFunc(node);
							}
						});

				Ext.getCmp(options.comboWithTooltip).setValue(names);
				if (Ext.getCmp(options.formId).getForm()
						.findField(options.returnIdField)) {
					Ext.getCmp(options.formId).getForm()
							.findField(options.returnIdField).setValue(ids);
				}

				if (Ext.getCmp(options.formId).getForm()
						.findField(options.returnNameField)) {
					Ext.getCmp(options.formId).getForm()
							.findField(options.returnNameField).setValue(names);
				}

				Ext.getCmp(options.comboWithTooltip).collapse();
			}
		});
	}

	if (listType == 'gridlist') {
		initTableViewToolbar(json.toolbars, defaultToolbarMenus, gridId,
				options);
	}

	var queryUrl = context + '/system/tablearg.do?method=list&querykey='
			+ querykey;

	if (options.params) {
		queryUrl = queryUrl + jsonToParameters(options.params);
	}

	var ds = new Ext.data.JsonStore({
				idProperty : 'PAGINATION_NUMBER',
				remoteSort : false,
				totalProperty : 'totalCount',
				root : 'queryList',
				fields : json.fieldName,
				proxy : new Ext.data.HttpProxy({
							url : queryUrl
						})
			});

	var grid;

	if (showchk) {
		grid = new Ext.grid.GridPanel({
					id : gridId,
					cm : cm,
					ds : ds,
					sm : sm,
					title : listType == 'tablequerycmp'
							? json.name
							: options.title,
					stateful : true,
					stripeRows : true,
					margins : '1 1 1 1',
					viewConfig : {
						forceFit : true
					},
					border : false,
					// config options for stateful behavior
					stateful : true,
					stateId : 'grid',
					loadMask : {
						msg : "数据加载中，请稍等..."
					},
					tbar : new Ext.Toolbar({
								id : gridId + '_toolbar',
								autoWidth : true,
								autoShow : true,
								items : [defaultToolbarMenus]
							}),
					bbar : new Ext.PagingToolbar({
								pageSize : pageSize,// 每页显示的记录值
								store : ds,
								displayInfo : true,
								displayMsg : '总记录数 {0} - {1} of {2}',
								emptyMsg : "没有记录"
							})
				});
	} else {
		grid = new Ext.grid.GridPanel({
					id : gridId,
					cm : cm,
					ds : ds,
					title : listType == 'tablequerycmp'
							? json.name
							: options.title,
					stateful : true,
					stripeRows : true,
					margins : '1 1 1 1',
					viewConfig : {
						forceFit : true
					},
					border : false,
					// config options for stateful behavior
					stateful : true,
					stateId : 'grid',
					loadMask : {
						msg : "数据加载中，请稍等..."
					},
					tbar : new Ext.Toolbar({
								id : gridId + '_toolbar',
								autoWidth : true,
								autoShow : true,
								items : [defaultToolbarMenus]
							}),
					bbar : new Ext.PagingToolbar({
								pageSize : pageSize,// 每页显示的记录值
								store : ds,
								displayInfo : true,
								displayMsg : '总记录数 {0} - {1} of {2}',
								emptyMsg : "没有记录"
							})
				});
	}

	/* 设置自定义参数 */
	ds.on('beforeload', function(thiz, options) {
				/* 查询参数 */
				var queryParams = getQueryParams(querykey);
				Ext.apply(thiz.baseParams, queryParams);
			});

	ds.load({
				params : {
					start : 0,
					limit : pageSize
				}
			});

	if (func) {
		func(gridId);
	}

	if (layout == 'border') {
		grid.region = 'center';

		var formObj = {
			bodyStyle : 'padding:5px;',
			autoScroll : true,
			border : false,
			frame : false
		}

		var queryForm = getTableViewForm({
					id : gridId_ + '_queryForm',
					component : queryItems,
					size : {
						columnCount : json.param.columnCount == null
								? 2
								: json.param.columnCount
					}
				}, options, formObj);

		queryForm.title = '数据查询条件';
		queryForm.autoWidth = true;

		var buttons = [];

		buttons.push({
					text : '查 询',
					handler : function() {
						if (queryForm.form.isValid()) {
							initQueryTestParams(queryForm, gridId, pageSize);

							var queryParams = getQueryParams(gridId);

							Ext.getCmp(gridId).getStore().reload({
										params : queryParams
									});

							queryWin.close();
						}
					}
				});

		buttons.push({
					text : '重 置',
					handler : function() {
						queryForm.form.reset();
					}
				});

		var height;

		if (options.height != null) {
			height = options.height;
		} else {
			height = json.param.height == null ? 200 : json.param.height;
		}

		var borderPanel = new Ext.Panel({
					title : options.title,
					layout : 'border',
					id : gridId_,
					items : [new Ext.Panel({
										region : 'north',
										height : height,
										title : '数据查询条件',
										autoScroll : true,
										split : true,// 显示分隔条
										collapsible : true,
										cmargins : '1 1 1 1',
										items : [queryForm],
										buttons : buttons
									}), grid]

				});

		return borderPanel;
	}

	return grid;
}

/**
 * for tablequery.item.type=='tablequery'
 * 
 * @param {}
 *            options
 */
function initTVqueryList(options) {
	var tabid = options.tabid;
	var querykey = options.querykey;
	var func = options.func;
	var pageSize = options.pageSize ? options.pageSize : 20;
	options.type = 'tablequerycmp';
	options.layout = 'border';
	/*
	 * var url = context +
	 * '/system/tablearg.do?method=modelcmp&comptype=TQExtTabList&' + param;
	 */

	var url = context + "/temp-store/jsstuff/tablequery/"
			+ tablequeryStuff[querykey] + "/" + querykey + ".json";

	// var result = sendRequest(url);

	var xmlhttp = sendRequestObject(url);
	if (xmlhttp.status == 200) {
		var resultJson = Ext.util.JSON.decode(xmlhttp.responseText);

		if (resultJson.success) {
			var json = resultJson.resultData;

			var grid = createTableQueryList(tabid, options, resultJson);

			return grid;
		} else {
			Ext.Msg.alert('提示', '获取通用查询json结构信息失败');
			return null;
		}

	}
}

/**
 * 默认的在查询列表页面添加自定义组件方法
 * 
 * @param {}
 *            querykey
 */
function addMeMix(querykey) {

}